package py.progweb.sgc.gui.server.service;

import java.util.List;

import javax.naming.NamingException;

import com.google.gwt.user.client.Window;

import py.progweb.sgc.gui.client.service.ABMService;
import py.progweb.sgc.gui.client.service.RemoteServiceException;
import py.progweb.sgc.gui.server.utils.EntityUtil;
import py.progweb.sgc.gui.shared.dialogmodel.DataRecord;
import py.progweb.sgc.manager.ABMManagerLocal;
import py.progweb.sgc.model.EntidadBase;
import py.progweb.sgc.model.Proveedor;

public class ABMServiceImpl extends BaseServiceImpl implements ABMService {
	ABMManagerLocal mgr;
	
	public ABMServiceImpl() throws NamingException {
		this.mgr = (ABMManagerLocal)getBean("ABMManager");
	}
	
	public void guardar(EntidadBase entity) throws RemoteServiceException {
		try {
			//logger.info("Guardando entidad: " + entity.getClass().getName() + " con pk: " + entity.getPK().toString());
			this.mgr.guardar(entity);
		}catch(Exception e) {
			throw manejarError(e);
		}
	}

	public void borrar(List<DataRecord> drs) throws RemoteServiceException {
		try {
			/*for (DataRecord dr: drs){
				Window.alert(dr.getClassName());
			}*/
			logger.info("Borrando " + drs.size() + " entidades");
			this.mgr.borrar(EntityUtil.dataRecords2Entities(drs, mgr));
		} catch (Exception e) {			
			throw manejarError(e);
		}
	}
	
	public EntidadBase transformar(DataRecord dr)throws RemoteServiceException{
		try {
			return EntityUtil.dataRecord2Entity(dr, mgr);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			//e.printStackTrace();
			throw new RemoteServiceException();
		}
	}

	@Override
	public List<DataRecord> getProductosPorProveedor(Integer pk)
			throws RemoteServiceException {
		// TODO Auto-generated method stub
		Proveedor proveedor = (Proveedor)this.mgr.buscar(Proveedor.class, pk);
		try {
			return EntityUtil.entities2DataRecords(proveedor.getProductos());
		} catch (Exception e) {
			// TODO Auto-generated catch block
			throw manejarError(e);
		}
	}
}
